Le Java Modeling Language (JML) est un langage de spécification pour Java.
Il est basé sur le paradigme de la programmation par contrat. Il utilise la logique de Hoare, les pré et postconditions ainsi que les invariants. Les spécifications sont ajoutées dans des commentaires spéciaux du code Java.
Il existe divers outils de vérification pour JML, tels que la vérification d'assertions à l'exécution (RAC) et la vérification statique (ESC/Java, OpenJML).